package com.my.code.sort;

import java.util.Arrays;

import static com.my.code.sort.Util.swap;

/**
 * 快速排序实现：单指针法
 *
 * @author zzl
 * @date 2020/10/15
 */
public class QuickSort1 {

    public static void main(String[] args) {
        int[] arr = {5, 7, 1, 6, 4, 8, 3, 2};
        sort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr));
    }

    private static void sort(int[] arr, int start, int end) {
        if (start < end) {
            int i = split(arr, start, end);
            sort(arr, start, i - 1);
            sort(arr, i + 1, end);
        }
    }

    /**
     * 分处理
     * @param start 起始位置
     * @param end 结束位置
     */
    private static int split(int[] arr, int start, int end) {
        int i = start;
        int base = arr[start];
        for (int j = start + 1; j <= end; j++) {
            if (arr[j] <= base) {
                i++;
                if (i != j) swap(arr, i, j);
            }
        }
        swap(arr, i, start);
        return i;
    }


}
